package service

import (
	"context"
	"devops-super/api"
	"devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// IUserConfig 用户配置服务接口
type IUserConfig interface {
	// GetPageLst 分页获取用户配置列表
	GetPageLst(ctx context.Context, req *v1.UserConfigGetPageLstReq) (out *api.PageLstRes[*entity.UserConfig], err error)
	// Add 新增用户配置
	Add(ctx context.Context, in *entity.UserConfig) (err error)
	// Upt 更新用户配置
	Upt(ctx context.Context, in *entity.UserConfig) (err error)
	// Del 删除用户配置
	Del(ctx context.Context, id int) (err error)
	// GetOne 获取单条用户配置
	GetOne(ctx context.Context, id int) (out *entity.UserConfig, err error)
	// GetOptions 获取用户配置选项
	GetOptions(ctx context.Context, req *v1.UserConfigGetOptionsReq) (out *v1.UserConfigGetOptionsRes, err error)
	GetGroupConfigs(ctx context.Context, in *v1.GetGroupConfigsReq) (out *v1.GetGroupConfigsRes, err error)
	SetGroupConfigs(ctx context.Context, in *v1.SetGroupConfigsReq) (err error)
	GetConfigByKey(ctx context.Context, userId int64, groupName string, configKey string) (configValue string, err error)
}

var (
	localUserConfig IUserConfig
)

// UserConfig 获取用户配置服务实例
func UserConfig() IUserConfig {
	if localUserConfig == nil {
		panic("implement not found for interface IUserConfig, forgot register?")
	}
	return localUserConfig
}

// RegisterUserConfig 注册用户配置服务实例
func RegisterUserConfig(i IUserConfig) {
	localUserConfig = i
}
